/*
 * @Description: 闭包
 * @Author: zzj
 * @Date: 2021-09-13 09:08:31
 * @LastEditors: zzj
 * @LastEditTime: 2021-09-13 13:14:34
 */

//坑点1： 引用的变量可能发生变化
function outer() {
  var result = []
  for (var i = 0;i<10;i++){
    result[i] = function () {
        console.info(i)  //因为每个闭包函数访问变量i是outer执行环境下的变量i，随着循环的结束，i已经变成10了，所以执行每个闭包函数，结果打印10， 10， ..., 10
    }
  }
  return result
}


//解决办法
function outer(num){
  var result = [];
  for(var i=0;i<num;i++){
    //result[i] = function(){console.log(i)}
    result[i] = (function(num){
      return function(){
        console.log(num);  //此时访问的num，是上层函数执行环境的num，数组有10个函数对象，每个对象的执行环境下的number都不一样
      } 
    })(i);
  }
  return result;
}
var arr=outer(3);
for(var i=0;i<3;i++){
  arr[i]()
}